// 优化
function Vue(config={}){
	const {data={},methods={}} = config;
	// config.data中的属性要作为Vue实例属性。
	// Vue的实例属性当中拥有$data
	// $data的引用地址与config.data相同
	this.$data = data;
	// Object.defineProperty拦截的对象是this.$data
	this.proxy(this.$data)
	// this.proxy(methods);
	for(let key in methods){
		this[key]=methods[key]
	}

}
Object.assign(Vue.prototype,{
	proxy(obj){
		for(let key in obj){
			Object.defineProperty(this,key,{
				get(){
					return obj[key];
				},
				set(v){
					obj[key] = v;
				}
			})
		}
	}
})
export default Vue;

// 未优化
// // config是Vue配置对象
// function Vue(config={}){
// 	const {data={},methods={}} = config;
// 	// config.data中的属性要作为Vue实例属性。
// 	// Vue的实例属性当中拥有$data
// 	// $data的引用地址与config.data相同
// 	this.$data = data;
// 	// Object.defineProperty拦截的对象是this.$data
// 	for(let key in data){
// 		// num
// 		// Object.defineProperty(this,"num"
// 		Object.defineProperty(this,key,{
// 			get(){
// 				return this.$data[key];
// 			},
// 			set(v){
// 				this.$data[key] = v;
// 			}
// 		})
// 	}
//
// 	for(let key in methods){
// 		Object.defineProperty(this,key,{
// 			get(){
// 				return methods[key];
// 			},
// 			set(v){
// 				methods[key] = v;
// 			}
// 		})
// 	}
// }
// export default Vue;